Malgrè le travail ci-dessous, il faut quand même passé énormément de temps à finir les rapports dans openOffice et aussi dans les fichiers XML qui sont intégrés dans le fichier openOffice


https://help.libreoffice.org/Common/List_of_Regular_Expressions/fr

/!\ ICI TOUS LES MOTS CLES DOIVENT ETRE EN MINUSCULE /!\

ouvrir le RTF et le sauver en ODT, ou passer comme format pivot par le DOCX si des éléments ne sont pas correctement traités.

/!\ Utiliser le format ODT 1.2 de base (non étendu) lors de la mise au point du modèle pour éviter que l'apparition de balises de gestion de version qui pourraient empêcher le fichier d'être correctement interprété.
--> https://ask.libreoffice.org/en/question/148700/where-do-the-textstyle-nametnn-span-tags-come-from-and-how-do-i-get-rid-of-them/
pour la chasse au span, dans une éditeur de texte rechertcher &gt;&gt;</text:span>


1 - Remplacer les anciens délimiteurs et supprimer les espaces inutiles autour des délimiteurs
/!\ les antislashes inclus dans le document doivent tous faire partie des délimiteurs
en REGEX
\\[:space:]*([^\\]*)[:space:]*\\
<<$1>>

puis remplacer tant qu'il y a des remplacements à effectuer

<<(.*)\((.*)([\u00A0])+(.*)\)>>
<<$1($2 $4)>>

puis
<<(.*)([\u00A0])+(.*)>>
<<$1 $3)>>

<<(.*)([:space:]|[\u00A0])+>>
<<$1>>

puis
<<(.*)([\u00A0])+(.*)>>
<<$1 $3)>>


2 - Le séparateur de chaîne est " donc il faut remplacer les 'xxx', ‘xxx’... par "xxx"
en REGEX

<<(.*)[‘’'](.*)[‘’'](.*)>>
<<$1"$2"$3>>


3 - Remplacer les : comme séparateur des noms d'entités de leur caractéristique par . tel que <<xxxx:yyyy>> vers <<xxxx.yyyy>>
en REGEX
<<(.*)\:(.*)>>
<<$1.$2>>

au cas par cas
<<(.*)([\u00A0])+\.(.*)>>
<<$1.$3>>


4 - Supprimer les espaces entre un nom de table et le . séparateur de nom de champ
en REGEX
<<(.+)((([:space:]|[\u00A0])+\.)|(\.([:space:]|[\u00A0])+))(.+)>>
<<$1.$7>>


5 - Changement sur les conditions
Remplacement des opérateurs booléens dans les tests (à adapter pour les && et les !)
<<(if)(.*)\|\|(.*)>>
<<$1$2or$3>>

<<(if)(.*)&&(.*)>>
<<$1$2and$3>>

<<(if)(.*)!=(.*)>>
<<$1$2<>$3>>


<<(if)(.*)!(.*)>>
à remplacer au cas par cas
devrait être
<<$1$2not $3>>


Remplacer les <<if concernant les jeux de données par <<iif
en REGEX
<<if[:space:]*\((.*)\.(.*)\)>>
<<iif ($1.$2)>>

puis
<<else>>
<<elseif>> ou <<elseiif>>

/!\ et pour chaque if remplacé en iif il faut trouver le endif correspondant et le transformer manuellement en endiif et idem pour elseif et elseiif, ce qui implique de recherche tous les iif pour adapter les elseif et endif


6 - <<scan(xxxx), noeof>> devient <<scan(xxxx) ; noifempty>>
en REGEX
<<scan[:space:]*\((.*)\)[:space:]*,[:space:]*noeof>>
<<scan($1);noifempty>>

rechercher les <<endscan>> et les remplacer manuellement par des <<endscan(xxxx)>> où xxx correspond à celui du scan de départ

7 - Remplacement de <<fimg par <<Picture et suppression du paramètre supplémentaire qui doit être adapté manuellement avec les options spécifiques aux images
en REGEX

on fait une première passe avant de faire du spécifique pour identifier plus facilement les traitements à éventuellement effectuer

<<fimg\((.*),.*([0-9]).*\)>>
<<picture($1):imgid=$2>>
et
<<fimg\(([^,]*)\)>>
<<picture($1):imgid=-1>>




<<fimg\(([^,]*)(.*)\)>>
<<picture($1)>>

On peut aussi créer des traitements particuliers en s'appuyant sur le paramètre de fimg,n par exemple pour le paramètre 4
en REGEX
<<fimg\((.*),.*4.*\)>>
<<picture($1):wcm=15>>




8 - Si la génération ne fonctionne pas il faut remettre en forme les <<scan manuellement
.Utiliser les tblrow pour header et contenu
.ajouter des conditions <<if (not XXX.0)>> pour savoir si un résultat est vide
/!\Pour l'instant, laisser de côté les scan imbriqués


9 - afin de relier les lignes de tableau pour les fusionner en un seul tableau il faut les enregistrer en docx, sortir du logiciel, recharger dans Libre Office  puis enregistrer en odt


10 - modifier les scan imbriqués pour faire des liens entre les éléments parents et enfants :
. première table
<<scan(impactDefinition);NoIfEmpty>>
<<scanentry(impactDefinition)>>
. deuxième table et jointure
<<scan(resultatTot);join(impactId = impactDefinition.impactId);noifempty>>
<<scanentry(resultatTot)>>
. valeurs que l'on souhaite afficher
<<impactDefinition.impactId>>
<<impactDefinition.impactUnit>>
<<resultatTot.impactValue>>
. fermeture des résultats imbriqués
<<endscan(resultatTot)>>
<<endscan(impactDefinition)>> 